
/*                          UX-Framework                               
 *                                                                 
 *  iZE Co.,Ltd. Copyright 2009 All rights reserved.          
 *  This file is distributed under the terms of the GNU Lesser 
 *  General Public License, described in file LICENSE.                                     
 */
package jp.ize.ux.components;

// {{{ imports
import jp.ize.ux.UXObject;
import jp.ize.ux.UXScalable;
import jp.ize.ux.UXResource;
import jp.ize.ux.UXRange;
import jp.ize.ux.UXController;
import jp.ize.ux.UXInteraction;
import jp.ize.ux.components.UXButton;
import jp.ize.ux.states.UXBasicState;
import jp.ize.ux.acts.Act;
import jp.ize.ux.components.UXComponent;
// }}}
// {{{ enum UXScrollBarDirection
enum UXScrollBarDirection
{
	/** 水平方向を表すバリアントです。 */
	HORIZONTAL;
	/** 鉛直方向を表すバリアントです。 */
	VERTICAL;
}
// }}}
// {{{ class UXScrollBarResource extends UXComponentResource
/**
 * UXScrollBarResource クラス<br>
 * UXScrollBarコンポーネントに利用されるリソース群です。
 */
class UXScrollBarResource extends UXComponentResource
{
	// {{{ public var upArrorwResource( default, default ) : UXButtonResource;
	/**
	 * 上矢印ボタンのためのリソースです。
	 */
	public var upArrowResource( default, default ) : UXButtonResource;
	// }}}
	// {{{ public var downArrowResource( default, default ) : UXButtonResource;
	/**
	 * 下矢印ボタンのためのリソースです。
	 */
	public var downArrowResource( default, default ) : UXButtonResource;
	// }}}
	// {{{ public var trac( default, default ) : UXScalable;
	/**
	 * スクロールトラック(背景)となるコンポーネントです。
	 */
	public var trac( default, default ) : UXScalable;
	// }}}
	// {{{ public var thumbResource( default, default ) : UXButtonResource;
	/**
	 * スクロールバーのサムです。
	 */
	public var thumb( default, default ) : UXButtonResource;
	// }}}
}
// }}}
// {{{ enum UXScrollBarActEvent
enum UXScrollBarActEvent
{
}
// }}}
// {{{ class UXScrollBarAct extends ActSubject<UXScrollBarActEvent>
/**
 * UXScrollBarAct クラス<br>
 * UXScrollBarのデフォルトアクションです。
 */
class UXScrollBarAct extends ActSubject<UXScrollBarActEvent>
{
	// {{{ public function new()
	/**
	 * コンストラクタです。<br>
	 */
	public function new()
	{
		super();
	}
	// }}}
	// {{{ public function scroll( s : UXScrollBarState ) : Void
	/**
	 * スクロールした時のデフォルトアクションです。
	 */
	public function scroll( s : UXScrollBarState ) : Void
	{
	}
	// }}}
	// {{{ public function uplight( s : UXScrollBarState ) : Void
	/**
	 * ハイライトした時のデフォルトアクションです。
	 */
	public function uplight( s : UXScrollBarState ) : Void
	{
	}
	// }}}
	// {{{ public function downlight( s : UXScrollBarState ) : Void
	/**
	 * ボタンのハイライトを解除した時のデフォルトアクションです。
	 */
	public function downlight( s : UXScrollBarState ) : Void
	{
	}
	// }}}
	// {{{ public function focus( s : UXScrollBarState ) : Void
	/**
	 * ボタンがフォーカスされた時のデフォルトアクションです。
	 */
	public function focus( s : UXScrollBarState ) : Void
	{
	}
	// }}}
	// {{{ public function unfocus( s : UXScrollBarState ) : Void
	/**
	 * ボタンのフォーカスが解除された時のデフォルトアクションです。
	 */
	public function unfocus( s : UXScrollBarState ) : Void
	{
	}
	// }}}
	// {{{ public function disable( s : UXScrollBarState ) : Void
	/**
	 * 無効にした時のデフォルトアクションです。
	 */
	public function disable( s : UXScrollBarState ) : Void
	{
	}
	// }}}
	// {{{ public function enable( s : UXScrollBarState ) : Void
	/**
	 * 有効にした時のデフォルトアクションです。
	 */
	public function enable( s : UXScrollBarState ) : Void
	{
	}
	// }}}
	// {{{ public function show( s : UXScrollBarState ) : Void
	/**
	 * 表示状態になった時のデフォルトアクションです。
	 */
	public function show( s : UXScrollBarState ) : Void
	{
	}
	// }}}
	// {{{ public function hide( s : UXScrollBarState ) : Void
	/**
	 * 非表示状態になった時のデフォルトアクションです。
	 */
	public function hide( s : UXScrollBarState ) : Void
	{
	}
	// }}}
}
// }}}
// {{{ class UXScrollBarCoState
class UXScrollBarCoState
{
	// {{{ public var focused(default, default) : Bool
	/**
	 * フォーカスが当たっているかどうかを取得、または設定します。
	 */
	public var focused(default, default) : Bool;
	// }}}
	// {{{ public var highlighted(default, default) : Bool
	/**
	 * ハイライトされているかどうかを取得、または設定します。
	 */
	public var highlighted(default, default) : Bool;
	// }}}
}
// }}}
// {{{ enum UXScrollBarExclusiveState
/**
 * UXScrollBarの各種状況を表現します。
 */
enum UXScrollBarExclusiveState
{
	/** 初期化状態にある事を意味します。*/
	INIT;
	/** 無効になっている事を意味します。*/
	DISABLE;
	/** 有効になっている事を意味します。パラメーターでは、フォーカスやハイライトの状況を保持します。*/
	ENABLE ( flags : UXScrollBarCoState );
}
// }}}
// {{{ class UXScrollBarState extends UXBasicState
/**
 * UXScrollBarState クラス<br>
 * UXScrollBarの現在の状態を表すオブジェクトです。<br>
 * 常にrange.min <= scrollPosition <= scrollPosition + pageSize <= range.max が成り立ちます。<br>
 */
class UXScrollBarState extends UXBasicState
{
	// {{{ public var resource( default, default ) : UXScrollBarResource;
	/**
	 * スクロールバーの描画に使用するリソースです。
	 */
	public var resource( default, default ) : UXScrollBarResource;
	// }}}
	// {{{ public var trac( default, default ) : UXScalable
	/**
	 * スクロールトラック(背景)です。
	 */
	public var trac( default, default ) : UXScalable;
	// }}}
	// {{{ public var thumb( default, default ) : UXButton
	/**
	 * スクロールバーのサムです。
	 */
	public var thumb( default, default ) : UXButton;
	// }}}
	// {{{ public var direction( default, default ) : UXScrollBarDirection
	/**
	 * スクロールが水平方向か、鉛直方向かを設定します。
	 */
	public var direction( default, default ) : UXScrollBarDirection;
	// }}}
	// {{{ public var liveDragging( default, default ) : Bool;
	/**
	 * ユーザーがスライダサムをドラッグしている間、UXScrollBarScrollInteractionが
	 * 継続的にスクロール位置が変化したというイベント送出するかどうかを示すブール値を取得または設定します。
	 */
	public var liveDragging( default, default ) : Bool;
	// }}}
	// {{{ public var range( default, default ) : UXRange;
	/**
	 * 最小値と最大値を設定します。scrollPosition は range.min から range.max-pageSize
	 * までの範囲で設定できることを注意してください。
	 */
	public var range( default, default ) : UXRange;
	// }}}
	// {{{ public var pageSize( default, default ) : Float;
	/**
	 * 1ページのサイズです。このサイズによって、サムのサイズを決定します。
	 */
	public var pageSize( default, default ) : Float;
	// }}}
	// {{{ public var position( default, default ) : Float;
	/**
	 * スクロール位置の現在の値を取得または設定します。
	 */
	public var position( default, default ) : Float;
	// }}}
	// {{{ public var condition( default, default) : UXScrollBarExclusiveState;
	/**
	 * enableかどうかやフォーカスが当たっているかなど各種状況を保持する変数です。
	 */
	public var condition( default, default) : UXScrollBarExclusiveState;
	// }}}
	// {{{ public var act(default, null) : UXScrollBarAct
	/**
	 * デフォルトの動きです。
	 */
	public var acts(default, null) : UXScrollBarAct;
	// }}}
}
// }}}
// {{{ class UXScrollBar extends UXComponent
/**
 * UXScrollBarクラス<br>
 * スクロールバーの実装です。<br>
 *
 * @author		iZE Co., Ltd.<br>
 * @version		$Id$<br>
 */
class UXScrollBar extends UXComponent
{
	// {{{ properties

	private var _state : UXScrollBarState;

	// }}}
	// {{{ public var ctrl : UXController<UXScrollBarState>;
	/**
	 * このコンポーネント内でのインタラクションを管理するコントローラークラスのインスタンスです。
	 */
	public var ctrl : UXController<UXScrollBarState>;
	// }}}
	// {{{ public function new()
	/**
	 * コンストラクタです。
	 * 引数で指定したDirectionのスクロールバーインスタンスを返します。デフォルトではHORIZONTALを指定します。
	 */
	public function new( ?dir : UXScrollBarDirection )
	{
		super();
		if (dir == null) dir = UXScrollBarDirection.HORIZONTAL;
	}
	// }}}
	// {{{ public function update( updator : UXScrollBarState -> Void ) : Void
	/**
	 * このコンポーネントの状態を直接変更するメソッドです。状態のどんな操作も可能になるので、
	 * このメソッドの使用には注意が必要です。
	 */
	public function update( updator : UXScrollBarState -> Void ) : Void
	{
		updator( _state );
	}
	// }}}
}
// }}}
// {{{ class UXScrollBarInitInteraction extends UXInteraction<UXScrollBarState>
/**
 * UXScrollBarInitInteraction クラス<br>
 * スクロールバーの初期化インタラクションです。
 */
class UXScrollBarInitInteraction extends UXInteraction<UXScrollBarState>
{
}
// }}}
// {{{ class UXScrollBarScrollInteraction extends UXInteraction<UXScrollBarState>
/**
 * UXScrollBarScrollInteraction クラス<br>
 * スクロールに対応するデフォルトインタラクションです。
 */
class UXScrollBarScrollInteraction extends UXInteraction<UXScrollBarState>
{
}
// }}}
// {{{ class UXScrollBarStepScrollInteraction extends UXInteraction<UXScrollBarState>
/**
 * UXScrollBarStepScrollInteraction クラス<br>
 * 一単位のスクロールに対応するデフォルトインタラクションです。
 */
class UXScrollBarStepScrollInteraction extends UXInteraction<UXScrollBarState>
{
}
// }}}
// {{{ class UXScrollBarPageScrollInteraction extends UXInteraction<UXScrollBarState>
/**
 * UXScrollBarPageScrollInteraction クラス<br>
 * 一ページ分のスクロールに対応するデフォルトインタラクションです。
 */
class UXScrollBarPageScrollInteraction extends UXInteraction<UXScrollBarState>
{
}
// }}}
// {{{ class UXScrollBarWheelScrollInteraction extends UXInteraction<UXScrollBarState>
/**
 * UXScrollBarWheelScrollInteraction クラス<br>
 * ホイールによるスクロールに対応するデフォルトインタラクションです。
 */
class UXScrollBarWheelScrollInteraction extends UXInteraction<UXScrollBarState>
{
}
// }}}
// {{{ class UXScrollBarFocusInteraction extends UXInteraction<UXScrollBarState>
/**
 * UXScrollBarFocusInteraction クラス<br>
 * ボタンのfocus/unfocusに対するデフォルトインタラクションです。
 */
class UXScrollBarFocusInteraction extends UXInteraction<UXScrollBarState>
{
}
// }}}
// {{{ class UXScrollBarResizeInteraction extends UXInteraction<UXScrollBarState>
/**
 * UXScrollBarResizeInteraction クラス<br>
 * ボタンの大きさの変更に対するデフォルトインタラクションです。
 */
class UXScrollBarResizeInteraction extends UXInteraction<UXScrollBarState>
{
}
// }}}
// {{{ class UXScrollBarEnableInteraction extends UXInteraction<UXScrollBarState>
/**
 * UXScrollBarEnableInteraction クラス<br>
 * 有効/無効に対するデフォルトインタラクションです。
 */
class UXScrollBarEnableInteraction extends UXInteraction<UXScrollBarState>
{
}
// }}}
// {{{ class UXScrollBarModelInteraction extends UXInteraction<UXScrollBarState>
/**
 * UXScrollBarModelInteraction クラス<br>
 * スクロールのモデル変更に対するデフォルトインタラクションです。
 */
class UXScrollBarModelInteraction extends UXInteraction<UXScrollBarState>
{
}
// }}}
